home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / CDICTION / CSTATICS.C < prev    next >
Text File  |  1989-09-15  |  7KB  |  256 lines

  1. /******************************************************************************
  2. CStaticString.c
  3.  
  4.     Displays a Pascal string
  5.     
  6.     SUPERCLASS = CPane
  7.     
  8.     see header for more information.
  9.     
  10. ******************************************************************************/
  11.  
  12. #include "CStaticString.h"
  13. #include "CTextEnvirons.h"
  14. #include "TBUtilities.h"
  15. #include "CSmartWindow.h"
  16. #include "CError.h"
  17.  
  18. /******************************************************************************/
  19. void CStaticString::IStaticString
  20.         (CView *anEnclosure, CBureaucrat *aSupervisor,
  21.          Int16 aWidth, Int16 aHeight, Int16 aHEncl, Int16 aVEncl,
  22.          SizingOption aHSizing, SizingOption aVSizing, StringPtr initString)
  23. {    
  24.     CPane::IPane( anEnclosure, aSupervisor, aWidth, aHeight, aHEncl,
  25.                     aVEncl, aHSizing, aVSizing);
  26.                     
  27.     if (initString)
  28.         pStrCopy( initString, itsString);
  29.     else itsString[0] = 0;
  30.     
  31.     eraseBehind = false;
  32.     useWinFont = TRUE;
  33.     itsStyle = 0;
  34.     
  35.     IStaticStringX();
  36.     
  37. }    /* CStaticString::IStaticString */         
  38. /******************************************************************************/
  39. void CStaticString::IViewTemp(
  40.             CView *anEnclosure, CBureaucrat *aSupervisor,
  41.             Ptr viewData)
  42. {
  43.     tStaticStringTemp    *template;
  44.     StringHandle    stringH;
  45.     
  46.     template = (tStaticStringTemp *) viewData;
  47.     
  48.     inherited::IViewTemp( anEnclosure, aSupervisor, viewData);
  49.     
  50.     stringH = GetString( template->theStrID);
  51.     CheckResource( (Handle) stringH);
  52.     
  53.     pStrCopy( *stringH, itsString);
  54.     ReleaseResource( stringH);
  55.     
  56.     eraseBehind = template->eraseBehind != 0;
  57.     useWinFont = template->useWinFont != 0;
  58.     itsStyle = template->fontStyle;
  59.     
  60.     IStaticStringX();
  61.  
  62. }    /* CStaticString::IViewTemp */
  63. /******************************************************************************/
  64. void CStaticString::IStaticStringX( void)
  65. {
  66.     TextInfoRec        textEnvirons;
  67.     
  68.     textEnvirons.fontNumber = applFont;
  69.     textEnvirons.theSize = 12;
  70.     textEnvirons.theStyle = 0;
  71.     textEnvirons.theMode = srcOr;
  72.     
  73.     if (!useWinFont)
  74.     {
  75.         itsEnvironment = new(CTextEnvirons);
  76.         ((CTextEnvirons *)itsEnvironment)->ITextEnvirons();
  77.         ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  78.     }
  79.     CalcFontInfo();
  80.     AdjustSize();
  81.  
  82. }    /* CStaticString::IStaticStringX */
  83. /******************************************************************************/
  84. void CStaticString::CalcFontInfo( void)
  85. {
  86.     FontInfo        fInfo;
  87.     
  88.     if (!useWinFont)
  89.         itsEnvironment->Restore();    /* set up text environment */ 
  90.     
  91.     GetFontInfo( &fInfo);
  92.     theFontInfo = fInfo;
  93.         
  94. }    /* CStaticString::CalcFontInfo */
  95. /******************************************************************************/
  96. void CStaticString::AdjustSize( void)
  97. {
  98.     Int16    sWidth;
  99.     Rect    r;
  100.     CSmartWindow *window;
  101.     GrafPtr savedPort;
  102.     
  103.     return;
  104.     
  105.     GetPort( &savedPort);
  106.     Prepare();
  107.     if (useWinFont)
  108.     {
  109.         window = (CSmartWindow *)GetWRefCon( macPort);
  110.         window->RestoreEnvirons();
  111.         TextFace( itsStyle);
  112.     }
  113.     
  114.     HLock( this);
  115.     sWidth = StringWidth( itsString)+3;
  116.     HUnlock( this);
  117.     
  118.     if (sWidth != width)
  119.     {
  120.         SetRect( &r, 0, 0, sWidth - width, 0);
  121.         ChangeSize( &r, TRUE);
  122.     }
  123.     SetPort( savedPort);
  124.  
  125. }    /* CStaticString::AdjustSize */
  126. /******************************************************************************/
  127. void CStaticString::SetStaticString( StringPtr theString)
  128. {
  129.     pStrCopy( theString, itsString);
  130.     AdjustSize();
  131.     Refresh();
  132.  
  133. }    /* CStaticString::SetStaticString */
  134. /******************************************************************************/
  135. void CStaticString::GetStaticString( StringPtr theString)
  136. {
  137.     if (theString)
  138.         pStrCopy( itsString, theString);
  139.  
  140. }    /* CStaticString::GetStaticString */
  141. /******************************************************************************/
  142. void CStaticString::SetIndString( Int16 resID, Int16 index)
  143. {
  144.     Str255    string;
  145.     
  146.     GetIndString( string, resID, index);
  147.     SetStaticString( string);
  148.  
  149. }    /* CStaticString::SetIndString */
  150. /******************************************************************************/
  151. void CStaticString::SetFontNum( Int16 theFontNum)
  152. {
  153.     TextInfoRec        textEnvirons;
  154.  
  155.     if (useWinFont) return;
  156.     
  157.     ((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
  158.     
  159.     textEnvirons.fontNumber = theFontNum;
  160.     ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  161.     CalcFontInfo();
  162.     AdjustSize();
  163.  
  164. }    /* CStaticString::SetFontNum */
  165. /******************************************************************************/
  166. void CStaticString::SetFontName( StringPtr theFontName)
  167. {
  168.     TextInfoRec        textEnvirons;
  169.     
  170.     if ((!theFontName) || (useWinFont)) return;
  171.     
  172.     ((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
  173.     
  174.     GetFontNumber( theFontName, &textEnvirons.fontNumber);
  175.     
  176.     if (textEnvirons.fontNumber > 0) 
  177.         ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  178.     CalcFontInfo();
  179.     AdjustSize();
  180.  
  181. }    /* CStaticString::SetFontName */
  182. /******************************************************************************/
  183. void CStaticString::SetTextSize( Int16 theSize)
  184. {
  185.     TextInfoRec        textEnvirons;
  186.     
  187.     if (useWinFont) return;
  188.  
  189.     ((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
  190.     textEnvirons.theSize = theSize;
  191.     ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  192.     CalcFontInfo();
  193.     AdjustSize();
  194.  
  195. }    /* CStaticString::SetTextSize */
  196. /******************************************************************************/
  197. void CStaticString::SetTextStyle( Int16 theStyle)
  198. {
  199.     TextInfoRec        textEnvirons;
  200.     
  201.     if (useWinFont) itsStyle = theStyle;
  202.     else
  203.     {
  204.         ((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
  205.         textEnvirons.theStyle = theStyle;
  206.         ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  207.     }
  208.     CalcFontInfo();
  209.     AdjustSize();
  210.  
  211. }    /* CStaticString::SetTextStyle */
  212. /******************************************************************************/
  213. void CStaticString::SetTextMode( Int16 theMode)
  214. {
  215.     TextInfoRec        textEnvirons;
  216.     
  217.     if (useWinFont) return;
  218.  
  219.     ((CTextEnvirons *)itsEnvironment)->GetTextInfo( &textEnvirons);
  220.     textEnvirons.theMode = theMode;
  221.     ((CTextEnvirons *)itsEnvironment)->SetTextInfo( &textEnvirons);
  222.  
  223. }    /* CStaticString::SetTextMode */
  224. /******************************************************************************/
  225. void CStaticString::Draw(Rect *area)
  226. {
  227.     Rect    r;
  228.     CSmartWindow    *window;
  229.     
  230.     inherited::Draw( area);
  231.     
  232.     if (eraseBehind)
  233.     {
  234.         r = frame;
  235.         EraseRect( &r);
  236.     }
  237.     if (useWinFont)
  238.     {
  239.         window = (CSmartWindow *)GetWRefCon( macPort);
  240.         window->RestoreEnvirons();
  241.         TextFace( itsStyle);
  242.     }
  243.     MoveTo( 1, theFontInfo.ascent + 1);
  244.     HLock( this);
  245.     DrawString( itsString);
  246.     HUnlock( this);
  247.  
  248. }    /* CStaticString::Draw */
  249. /******************************************************************************/
  250. void CStaticString::SetEraseBehind( Int16 doIt)
  251. {
  252.     eraseBehind = doIt;
  253.  
  254. }    /* CStaticString::SetEraseBehind */
  255. /******************************************************************************/
  256.